home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 1 Issue 2 / PDCD-1 - Issue 02.iso / _utilities / utilities / 004 / _rsynth / !rsynth / compd_c < prev    next >
Text File  |  1994-04-05  |  2KB  |  119 lines

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include "getopt.h"
  5.  
  6. int getline(char *s,int lim,FILE *fp)
  7. {
  8.   int c,i;
  9.   i = 0;
  10.   while(--lim > 0 && (c=getc(fp)) != EOF && c != '\n')
  11.     s[i++] = c;
  12.   if(c == '\n')
  13.     s[i++] = c;
  14.   s[i] = '\0';
  15.   return i;
  16. }
  17.  
  18. void use(void)
  19. {
  20.  fprintf(stderr,"Use:\nCompdict -i<inputfile> -o<outputfile> -s<level>\n"); 
  21.  fprintf(stderr,"level = 0 : all entries\n"); 
  22.  fprintf(stderr,"level = 1 : no rare entries\n"); 
  23.  fprintf(stderr,"level = 2 : only top 500\n"); 
  24.  exit(0);
  25. }
  26.  
  27. int main(int argc,char **argv)
  28. {
  29.   char line[256],outl[256],*otp;
  30.   int i,pri,minpri,c,accept,lineno,bf;
  31.   FILE *fpin,*fpout;
  32.  
  33.   line[0] = outl[0] = 0;
  34.   minpri = -1;
  35.  
  36.   while((c = getopt(argc,argv,"i:o:s:")) != EOF)
  37.    {
  38.      switch(c)
  39.        {
  40.         case 'i':
  41.          strcpy(line,optarg);
  42.          break;
  43.         case 'o':
  44.          strcpy(outl,optarg);
  45.          break;
  46.         case 's':
  47.          minpri = strtol(optarg,NULL,10);
  48.          break;
  49.         case '?':
  50.          use();
  51.        }
  52.     }
  53.   if(!line[0] || !outl[0] || (minpri < 0) || (minpri > 2))
  54.      use();
  55.  
  56.  fpin = fopen(line,"r");
  57.  if(!fpin)
  58.    {
  59.     fprintf(stderr,"file %s not found\n",line);
  60.     exit(1);
  61.    }
  62. fpout = fopen(outl,"w");
  63.  if(!fpout)
  64.    {
  65.     fprintf(stderr,"could not open output file %s \n",outl);
  66.     exit(1);
  67.    }
  68.  
  69.   accept = 0;
  70.   lineno = 0;
  71.   while(getline(line,256,fpin))
  72.   {
  73.     lineno++;
  74.     otp = outl;
  75.     bf = 0;
  76.     for(i=0;i<23 && line[i] != ' ';i++)
  77.       {
  78.        if(line[i] == '|')
  79.         {fprintf(stderr,"illegal character '|' in line %d %s\n ignoring line\n",lineno,line);
  80.          bf = 1;
  81.          break;
  82.         }
  83.       *otp++ = line[i];
  84.       }
  85.     if(bf)
  86.       continue;
  87.     for(;i<23 && line[i] == ' ';i++);
  88.     if(i!=23)
  89.        {
  90.         fprintf(stderr,"error in line %d %s\n ignoring it\n",lineno,line);
  91.         continue; 
  92.        }
  93.     *otp++ = '|';
  94.     for(i=23;i<46 && line[i] != ' ';i++)
  95.       *otp++ = line[i];
  96.     for(;i<46 && line[i] == ' ';i++);
  97.     if(i!=46)
  98.        {
  99.         fprintf(stderr,"error in line %d %s\n ignoring it\n",lineno,line);
  100.         continue; 
  101.        }
  102.      *otp++ = '\0';
  103.     pri = 0;
  104.     for(i=46;i<69 && line[i] != ' ';i++)
  105.     {
  106.       if(line[i] == '*') pri = 2;
  107.       if(line[i] == '%' && pri < 1) pri = 1;
  108.     }
  109.     if(pri >= minpri)
  110.       {
  111.        fprintf(fpout,"%s\n",outl);
  112.        accept++;
  113.       }
  114.   }
  115.  fclose(fpin);
  116.  fclose(fpout);
  117.  printf("Done.\nLines read: %d\nLines transferred to output: %d\n",lineno,accept);
  118. }
  119.